卷积是一种数学操作,通常用于信号处理、图像处理和深度学习中。在数学上,卷积是两个函数(f 和 g)的组合,生成第三个函数,表示其中一个函数“折叠”另一个函数的方式。
使用卷积网络进行手写数字识别
import torchfrom sklearn import datasetsfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerimport numpy as np# 加载数据digits = datasets.load_digits()X = digits.imagesy = digits.target# 数据标准化X = StandardScaler().fit_transform(X.reshape(len(X), -1)).reshape(X.shape)# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 将数据转换为 PyTorch 张量X_train_tensor = torch.tensor(X_train, dtype=torch.float32).unsqueeze(1) # 增加一个通道维度X_test_tensor = torch.tensor(X_test, dtype=torch.float32).unsqueeze(1)y_train_tensor = torch.tensor(y_train, dtype=torch.long)y_test_tensor = torch.tensor(y_test, dtype=torch.long)
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()# 调整卷积层和池化层self.conv1 = nn.Conv2d(1, 10, kernel_size=3, padding=1) # 使用 paddingself.pool = nn.MaxPool2d(2, 2) # 定义一次,复用self.fc1 = nn.Linear(10 * 4 * 4, 50) # 调整全连接层输入尺寸self.fc2 = nn.Linear(50, 10)def forward(self, x):x = self.pool(F.relu(self.conv1(x)))# 移除了一层卷积以适应更小的输入尺寸x = x.view(-1, 10 * 4 * 4) # 调整 view 参数以匹配特征图尺寸x = F.relu(self.fc1(x))x = self.fc2(x)return x
import torch.optim as optimnet = SimpleCNN()criterion = nn.CrossEntropyLoss()optimizer = optim.Adam(net.parameters(), lr=0.001)# 训练循环for epoch in range(50):optimizer.zero_grad()outputs = net(X_train_tensor)loss = criterion(outputs, y_train_tensor)loss.backward()optimizer.step()print(f'Epoch {epoch+1}, Loss: {loss.item()}')
with torch.no_grad():outputs = net(X_test_tensor)predicted = torch.max(outputs.data, 1)total = y_test_tensor.size(0)correct = (predicted == y_test_tensor).sum().item(): {100 * correct / total}%')
![[算法学习]深度学习之卷积CNN [算法学习]深度学习之卷积CNN](20240527_033540_0.jpeg)
讲解一下卷积的计算
假设我们有一个 3x3 的卷积核,应用于一个 8x8 的图像(手写数字数据集中的一个样本),步长为 1,padding 为 1。
第一步卷积计算:
图像尺寸:8x8
卷积核尺寸:3x3
步长(Stride):1
填充(Padding):1
输出尺寸计算公式为:
因此,输出尺寸为:(8-3+2*1)/1=8
所以,应用此卷积核后,输出特征图的尺寸依然是 8x8。
第二步应用池化层:
如果使用 2x2 的池化层,步长为 2,则输出尺寸变为 4x4。
code/s?__biz=Mzg3Mzg4MzY0MA==&mid=2247484463&idx=1&sn=6f5fcc3096c0e0038b80da349ec2ff03&chksm=ced876b8f9afffae026f945a5f4ceadcaa36ad876bba186ed5b872d79789e824723dde1badd9#rd